<?php

class contato_alertasModel extends Model{
         
    public function __construct() {
        parent::__construct();
        $this->LoadResource("html", 'Html');
    }
    private $remetente_default = array(
        'user_name'  => SITE_NOME,
        'user_cargo' => '',
        'email'      => SITE_EMAIL
    );
    public function alertar($assunto, $texto, $destinatarios, $user = array(), $blockSelfAlert = true){
        if(empty($user)){$user = $this->remetente_default;}
        $destinatarios = $this->filterDestinatarios($user['email'], $destinatarios, $blockSelfAlert);
        if(!$this->valida($texto, $destinatarios)) {return true;}
        
        $this->assunto           = $assunto; 
        $this->texto             = $texto;
        $this->destinatarios     = $destinatarios;
        $this->nome_remetente    = $user['user_name'].($user['user_cargo'] != "")?"(".$user['user_cargo'].")":"";
        $this->email_remetente   = $user['email'];
        $bool = true;
        $tipo = $this->LoadTiposAlerta();
        if(is_array($tipo))
            foreach($tipo as $a)
                $bool = $bool && $this->envia_alerta($a);
        else $bool = $this->envia_alerta($tipo);
        return $bool;
    }
    
    private function envia_alerta($a){
        $model = "contato/alertas/alert/$a";
        $this->LoadModel($model, 'aobj', false);
        $bool = true;
        if($this->aobj != NULL) {
            $bool = $this->aobj->alertar($this->assunto, $this->texto, $this->destinatarios, $this->nome_remetente, $this->email_remetente);
            $this->setMessages($this->aobj->getMessages());
        }
        return $bool;
    }
    
    /*
     * Nesta função será possível carregar tipos diferentes de alertas 
     * de acordo com as configurações do usuário. Atualmente só existe o
     * tipo email, logo só este tipo será usado.
     */
    private function LoadTiposAlerta(){
        $tipo = 'email';
        return $tipo;
    }
    
    private function valida($texto, $destinatarios){
        if(empty($destinatarios)){
            $this->setAlertMessage('Nenhum Destinatário selecionado');
            return false;
        }
        
        if($texto == ""){
            $this->setAlertMessage("O texto de notificação não pode ser vazio");
            return false;
        }
        
        return true;
    }
    
    private function filterDestinatarios($email_remetente, $destinatarios, $blockSelfAlert){
        if(empty($destinatarios)) return array();
        if(!is_array($destinatarios)){$destinatarios = array($destinatarios);}
        $out = array();
        foreach($destinatarios as $i => $dest){
            if($email_remetente == $dest && $blockSelfAlert) continue;
            $out[$dest] = $dest;
        }
        //print_r($out);
        return $out;
    }
}

?>
